程式掛掉後該如何自動重跑呢? 在microPython的官方文件中有寫到 machine 中有一個reset的功能
machine.reset()
Resets the device in a manner similar to pushing the external RESET button.
那可以在try .. exception 中的例外情況下直接設定這個嗎? 筆者曾經直接做過這個實驗, 不過 ...
[實作] 讓程式在掛掉後自動重跑 (以自動同步網路時間為例)
from ntptime import settime
try:
print("Time sync")
settime()
except:
print ("Restart the service")
machine.reset()
[秘訣]
(1) 這種設定方式的確會在遇到例外情況後直接重跑, 由於遇到例外情況後裝置就會重啟跟重跑, 所以當筆者使用Ctrl-C 組合鍵做中斷的時候就符合這個條件, 變成無窮的重啟跟重跑並且無法從程式中跳出
解法: 只能使用ampy 把main.py直接刪除才有效或者重刷F/W
ampy -p /dev/ttyUSB0 -b115200 rm main.py
(2) 筆者發現, 使用webrepl client 不一定可以順利登入
(3) machine.reset(): 當執行這命令時會強制做** soft reset**裝置的行為
from ntptime import settime
while True:
try:
print("Time sync")
settime()
except Exception as ex:
print ("[Exception]: {0}".format(ex.args))
pass
[秘訣] 使用這個寫法就可以在程式掛掉後自動重啟, 若使用者使用ctrl-C的組合按鍵也可以使用中斷的方式中斷程式運行以利除錯